diff --git jmemmgr.c jmemmgr.c
--- jmemmgr.c
+++ jmemmgr.c
@@ -28,16 +28,17 @@
  */
 
 #define JPEG_INTERNALS
 #define AM_MEMORY_MANAGER       /* we define jvirt_Xarray_control structs */
 #include "jinclude.h"
 #include "jpeglib.h"
 #include "jmemsys.h"            /* import the system-dependent declarations */
 #include <stdint.h>
+#include <limits.h>             /* some NDKs define SIZE_MAX in limits.h */
 
 #ifndef NO_GETENV
 #ifndef HAVE_STDLIB_H           /* <stdlib.h> should declare getenv() */
 extern char *getenv (const char *name);
 #endif
 #endif


diff --git jmorecfg.h jmorecfg.h
--- jmorecfg.h
+++ jmorecfg.h
@@ -9,16 +9,17 @@
  * For conditions of distribution and use, see the accompanying README.ijg
  * file.
  *
  * This file contains additional configuration options that customize the
  * JPEG software for special applications or support machine-dependent
  * optimizations.  Most users will not need to touch this file.
  */
 
+#include <stdint.h>
 
 /*
  * Maximum number of components (color channels) allowed in JPEG image.
  * To meet the letter of the JPEG spec, set this to 255.  However, darn
  * few applications need more than 4 channels (maybe 5 for CMYK + alpha
  * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
  * really short on memory.  (Each allowed component costs a hundred or so
  * bytes of storage, whether actually used in an image or not.)
@@ -118,39 +119,25 @@ typedef char JOCTET;
  * They must be at least as wide as specified; but making them too big
  * won't cost a huge amount of memory, so we don't provide special
  * extraction code like we did for JSAMPLE.  (In other words, these
  * typedefs live at a different point on the speed/space tradeoff curve.)
  */
 
 /* UINT8 must hold at least the values 0..255. */
 
-#ifdef HAVE_UNSIGNED_CHAR
-typedef unsigned char UINT8;
-#else /* not HAVE_UNSIGNED_CHAR */
-#ifdef __CHAR_UNSIGNED__
-typedef char UINT8;
-#else /* not __CHAR_UNSIGNED__ */
-typedef short UINT8;
-#endif /* __CHAR_UNSIGNED__ */
-#endif /* HAVE_UNSIGNED_CHAR */
+typedef uint8_t UINT8;
 
 /* UINT16 must hold at least the values 0..65535. */
 
-#ifdef HAVE_UNSIGNED_SHORT
-typedef unsigned short UINT16;
-#else /* not HAVE_UNSIGNED_SHORT */
-typedef unsigned int UINT16;
-#endif /* HAVE_UNSIGNED_SHORT */
+typedef uint16_t UINT16;
 
 /* INT16 must hold at least the values -32768..32767. */
 
-#ifndef XMD_H                   /* X11/xmd.h correctly defines INT16 */
-typedef short INT16;
-#endif
+typedef int16_t INT16;
 
 /* INT32 must hold at least signed 32-bit values.
  *
  * NOTE: The INT32 typedef dates back to libjpeg v5 (1994.)  Integers were
  * sometimes 16-bit back then (MS-DOS), which is why INT32 is typedef'd to
  * long.  It also wasn't common (or at least as common) in 1994 for INT32 to be
  * defined by platform headers.  Since then, however, INT32 is defined in
  * several other common places:
@@ -167,25 +154,17 @@ typedef short INT16;
  * This is a recipe for conflict, since "long" and "int" aren't always
  * compatible types.  Since the definition of INT32 has technically been part
  * of the libjpeg API for more than 20 years, we can't remove it, but we do not
  * use it internally any longer.  We instead define a separate type (JLONG)
  * for internal use, which ensures that internal behavior will always be the
  * same regardless of any external headers that may be included.
  */
 
-#ifndef XMD_H                   /* X11/xmd.h correctly defines INT32 */
-#ifndef _BASETSD_H_		/* Microsoft defines it in basetsd.h */
-#ifndef _BASETSD_H		/* MinGW is slightly different */
-#ifndef QGLOBAL_H		/* Qt defines it in qglobal.h */
-typedef long INT32;
-#endif
-#endif
-#endif
-#endif
+typedef int32_t INT32;
 
 /* Datatype used for image dimensions.  The JPEG standard only supports
  * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
  * "unsigned int" is sufficient on all machines.  However, if you need to
  * handle larger images and you don't mind deviating from the spec, you
  * can change this datatype.  (Note that changing this datatype will
  * potentially require modifying the SIMD code.  The x86-64 SIMD extensions,
  * in particular, assume a 32-bit JDIMENSION.)
